home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C ++ / Applications / FlyThrough 1.1.2 / src / Source / Vehicle Classes / CVehicle.h < prev    next >
Encoding:
Text File  |  1997-03-09  |  3.4 KB  |  108 lines  |  [TEXT/CWIE]

  1. //
  2. //    CVehicle.h
  3. //
  4. //    Maintain a "Vehicle" (camera and two headlights)
  5. //
  6. //    By James Jennings
  7. //    Started July 8, 1996
  8. //
  9.  
  10. #pragma once
  11.  
  12. #include <LListener.h>
  13. #include "CObjectMaker.h"
  14. #include "CCameraMaker.h"
  15.  
  16. const CommandT    cmd_LightsOff        = 2000;
  17. const CommandT    cmd_LeftLight        = 2001;
  18. const CommandT    cmd_RightLight        = 2002;
  19. const CommandT    cmd_BothLights        = 2003;
  20. const CommandT    cmd_CenteredLights    = 2004;
  21. const CommandT    cmd_SeparatedLights    = 2005;
  22.  
  23. const CommandT    cmd_ExtraLights        = 2010;
  24.  
  25. class CVehicleViewPane;
  26.  
  27. // Helper class: Make one spot light.
  28. class CSpotLight : public CObjectMaker<TQ3LightObject> {
  29. public:
  30.     CSpotLight( TQ3CameraPlacement inPlace, float inOffset );
  31.     
  32.     virtual void    Transform( TQ3Matrix4x4 &inM );
  33.     virtual void    SetInitialPlacement( const TQ3CameraPlacement inPlace, float inOffset );
  34.     virtual void    TurnOn( TQ3Boolean inOn );
  35.     virtual Boolean IsOn() const { return mData.lightData.isOn; }
  36. protected:
  37.     virtual void Make();
  38.     TQ3Point3D mStartLocation;
  39.     TQ3Vector3D mStartDirection;
  40.     TQ3SpotLightData    mData;
  41. };
  42.     
  43. class CVehicle : public LListener {
  44. public:
  45.                 CVehicle( CVehicleViewPane    *mViewPane ); //const SDimension16 &inFrameSize );
  46.     virtual        ~CVehicle();
  47.     
  48.     // motion
  49.     virtual void    SetScale(float inScale);
  50.     
  51.     virtual Boolean    Boost( float inT, Int16 inSignX, Int16 inSignY, Int16 inSignZ );
  52.     virtual Boolean    Spin( float inT, Int16 inSignY, Int16 inSignP, Int16 inSignR );
  53.     
  54.     virtual void    MoveForwardBy( float inDistance );
  55.     virtual void    MoveRightBy( float inDistance );
  56.     virtual void    MoveUpBy( float inDistance );
  57.     virtual void    YawBy( float inAngle );
  58.     virtual void    PitchBy( float inAngle );
  59.     virtual void    RollBy( float inAngle );
  60.     
  61.     virtual Boolean    RollIsStabilized() { return mRollIsStabilized; }
  62.     virtual void    SetRollStabilized(Boolean inStabilized);
  63.     virtual Boolean    StabilizeRoll();
  64.     
  65.     // camera and lights
  66.     virtual TQ3CameraObject    GetCamera() const;
  67.     virtual void            SetCamera(TQ3CameraObject inCamera);
  68.     virtual void            GetPlacement(TQ3CameraPlacement &outPlace) const { outPlace = mPlacement; }
  69.     virtual void            SetPlacement(const TQ3CameraPlacement &inPlace);
  70.     virtual void            AddHeadlightsToGroup( TQ3GroupObject ioGroup ) const;
  71.     
  72.     virtual void        SetLightMode( CommandT inLightMode );
  73.     virtual CommandT    GetHeadlightState(void) const;
  74.     virtual Boolean        AreHeadlightsMerged(void) const { return mMergedLights; }
  75.     
  76.     // LListener methods
  77.     virtual void    ListenToMessage(MessageT inMessage, void *ioParam);
  78.     
  79. protected:
  80.     // helper functions
  81.     virtual float    GetThrust();
  82.     virtual float    CalcDynamicParam(float t, float &v, Int16 sign, float acc, float damp);
  83.     
  84.     virtual    void    GetUpVector( TQ3Vector3D &outUp );
  85.     virtual    void    GetForwardVector( TQ3Vector3D &outUp );
  86.     virtual    void    GetRightVector( TQ3Vector3D &outUp );
  87.     virtual void    ApplyMatrix( TQ3Matrix4x4 &inChange );
  88.     
  89.     CVehicleViewPane *    mViewPane;
  90.     
  91.     CSpotLight            mLeftLight;
  92.     CSpotLight            mRightLight;
  93.     TQ3GroupObject        mHeadlights;
  94.     Boolean                mMergedLights;
  95.     
  96.     TQ3CameraObject        mCamera;
  97.     TQ3CameraPlacement    mStartPlacement; // initial "placement" for the camera
  98.     TQ3CameraPlacement    mPlacement; // current "placement" for the camera
  99.     TQ3Matrix4x4        mMatrix;    // transform from initial placement to current placement
  100.     
  101.     TQ3Vector3D            mVelocity;    // vehicle velocity
  102.     float                mYawVelocity, mPitchVelocity, mRollVelocity;
  103.     Boolean                mRollIsStabilized;
  104.     TQ3Vector3D            mLocalVertical;
  105.     float                mThrust;
  106.     float                mThrottle;    // user settable control
  107. };
  108.